#include "family.h"
#include <algorithm> 
#include <ctime>    // 引入时间库以获取当前年份

// 计算年龄的辅助函数
int calculateAge(const std::string& birthDate) {
    // 假设 birthDate 格式为 "YYYY-MM-DD"
    int year = std::stoi(birthDate.substr(0, 4));
    int currentYear = std::time(nullptr) / (365 * 24 * 60 * 60) + 1970; // 获取当前年份
    return currentYear - year;
}

//按出生日期对家谱中所有人排序



// 按出生日期对家谱中所有人排序
void FamilyTree::sortMembersByBirthDate() {
    if (root == nullptr) return; // 如果树为空，直接返回

    // 使用 lambda 表达式按出生日期排序
    std::sort(root->children.begin(), root->children.end(), [](FamilyMember* a, FamilyMember* b) {
        return a->birthDate < b->birthDate; // 按出生日期升序排序
    });

    // 如果需要递归排序所有子成员，可以使用一个辅助函数
    for (auto child : root->children) {
        std::sort(child->children.begin(), child->children.end(), [](FamilyMember* a, FamilyMember* b) {
            return a->birthDate < b->birthDate; // 按出生日期升序排序
        });
    }
}

//建立二叉排序树，并按年龄大小排序并输出
void FamilyTree::sortMembersByAge() {
    if (root == nullptr) return; // 如果树为空，直接返回

    // 使用 lambda 表达式按年龄排序
    std::sort(root->children.begin(), root->children.end(), [](FamilyMember* a, FamilyMember* b) {
        return calculateAge(a->birthDate) < calculateAge(b->birthDate); // 按年龄升序排序
    });

    // 如果需要递归排序所有子成员，可以使用一个辅助函数
    for (auto child : root->children) {
        std::sort(child->children.begin(), child->children.end(), [](FamilyMember* a, FamilyMember* b) {
            return calculateAge(a->birthDate) < calculateAge(b->birthDate); // 按年龄升序排序
        });
    }
}